} else if (strcmp(interface, "gtk_shell") == 0) {
display_wayland->gtk_shell =
wl_registry_bind(display_wayland->wl_registry, id, >k_shell_interface, 1);
+ _gdk_wayland_screen_set_has_gtk_shell (display_wayland->screen);
+ /* We need another roundtrip to receive the shell capabilities */
+ wait_for_roundtrip(display_wayland);
} else if (strcmp(interface, "wl_output") == 0) {
output =
wl_registry_bind(display_wayland->wl_registry, id, &wl_output_interface, MIN (version, 2));
GHashTable *settings;
GsdXftSettings xft_settings;
+
+ guint32 shell_capabilities;
};
struct _GdkWaylandScreenClass
update_xft_settings (screen);
}
+static void
+gtk_shell_handle_capabilities (void *data,
+ struct gtk_shell *shell,
+ uint32_t capabilities)
+{
+ GdkWaylandScreen *screen_wayland = data;
+
+ screen_wayland->shell_capabilities = capabilities;
+}
+
+struct gtk_shell_listener gdk_screen_gtk_shell_listener = {
+ gtk_shell_handle_capabilities
+};
+
+void
+_gdk_wayland_screen_set_has_gtk_shell (GdkScreen *screen)
+{
+ GdkWaylandDisplay *wayland_display = GDK_WAYLAND_DISPLAY (GDK_WAYLAND_SCREEN (screen)->display);
+
+ gtk_shell_add_listener (wayland_display->gtk_shell, &gdk_screen_gtk_shell_listener, screen);
+}
+
static void
set_value_from_entry (GdkScreen *screen,
TranslationEntry *entry,
}
}
+static gboolean
+set_capability_setting (GdkScreen *screen,
+ GValue *value,
+ enum gtk_shell_capability test)
+{
+ GdkWaylandScreen *wayland_screen = GDK_WAYLAND_SCREEN (screen);
+
+ g_value_set_boolean (value, (wayland_screen->shell_capabilities & test) == test);
+
+ return TRUE;
+}
+
static gboolean
gdk_wayland_screen_get_setting (GdkScreen *screen,
const gchar *name,
return TRUE;
}
+ if (strcmp (name, "gtk-shell-shows-app-menu") == 0)
+ return set_capability_setting (screen, value, GTK_SHELL_CAPABILITY_GLOBAL_APP_MENU);
+
+ if (strcmp (name, "gtk-shell-shows-menubar") == 0)
+ return set_capability_setting (screen, value, GTK_SHELL_CAPABILITY_GLOBAL_MENU_BAR);
+
return FALSE;
}
<protocol name="gtk">
<interface name="gtk_shell" version="1">
+ <enum name="capability">
+ <entry name="global_app_menu" value="1"/>
+ <entry name="global_menu_bar" value="2"/>
+ </enum>
+
+ <event name="capabilities">
+ <arg name="capabilities" type="uint"/>
+ </event>
+
<request name="get_gtk_surface">
<arg name="gtk_surface" type="new_id" interface="gtk_surface"/>
<arg name="surface" type="object" interface="wl_surface"/>